package com.hz.web.service.impl;

import java.io.File;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Service;
import com.alibaba.fastjson.JSONObject;
import com.hz.web.dao.PersonalDao;
import com.hz.web.entity.PersonalEntity;
import com.hz.web.service.IpersonalService;
import com.hz.web.util.Constant;
import com.hz.web.util.Excel;
import com.hz.web.util.Uid;
import com.hz.web.util.UtilMethods;
/**
 * 红黑名单自然人信息Impl层
 * @author Administrator
 *
 */
@Service
public class PersonalImpl implements IpersonalService {
	
	@Resource
	private PersonalDao personalDao;

	/**
	 *
	 * 查询自然人红黑名单信息
	 * @param parms Map<String, Object>
	 * @param sysId   主键
	 * @param personaIdCard 身份证
	 * @param projectName 项目名称
	 * @param personaName 自然人姓名
	 * @param reason 列入红黑名单原由
	 * @param addDate 列入红黑名单日期
	 * @param validity 有效期
	 * @param type 1 红名单  2黑名单
	 * @param isDel 1显示  2删除
	 * @param isOrder isOrder =='y' 按列入红黑名单日期降序排序
	 * @param index 分页  当前显示的下标
	 * @param count 显示的条数
	 * @return List<PersonalEntity> 自然人信息集合
	 */
	@Override
	public List<PersonalEntity> queryPersonal(Map<String, Object> parms) {
		return personalDao.queryPersonal(parms);
	}

	/**
	 * 查询自然人红黑名单信息总条数 
	 * @param parms Map<String, Object>
	 * @param sysId   主键
	 * @param personaIdCard 身份证
	 * @param projectName 项目名称
	 * @param personaName 自然人姓名
	 * @param reason 列入红黑名单原由
	 * @param addDate 列入红黑名单日期
	 * @param validity 有效期
	 * @param type 1 红名单  2黑名单
	 * @param isDel 1显示  2删除
	 * @return int 总条数
	 */
	@Override
	public int queryPersonalCount(Map<String, Object> parms) {
		return personalDao.queryPersonalCount(parms);
	}

	/**
	 * 批量插入自然人红黑名单信息
	 * @param list 红黑名单自然人信息实体类集合
	 * @return
	 */
	@Override
	public int addBatchPersonal(List<PersonalEntity> list) {
		return personalDao.addBatchPersonal(list);
	}

	/**
	 * 修改自然人红黑名单信息 
	 * @param entity  红黑名单自然人信息 实体类
	 * @return
	 */
	@Override
	public int updatePersonal(PersonalEntity entity) {
		return personalDao.updatePersonal(entity);
	}
	
	/**
	 * 解析excle
	 */
	@Override
	public JSONObject fileLoadExcle(String url, String type,String name,HttpServletRequest request)
			throws ParseException {
		JSONObject json = new JSONObject();
		json.put("code","200");
		// ------------------------------------------------------------
		String path = request.getSession().getServletContext().getRealPath("");
		path = path + File.separator + "them" + File.separator
				+ "fileload_excle";
		String filePath = path + File.separator + url;
		// 从excl表格中读取数据
		Excel poi = new Excel();
		List<List<String>> list = poi.read(filePath);
		List<PersonalEntity> resultList = new ArrayList<PersonalEntity>();
		int hang = 0;
		for (List<String> list2 : list) {// 行
			hang++;
			List<String> cellList = list2; // 列
			PersonalEntity entity = new PersonalEntity();
			for (int i = 0; i < cellList.size(); i++) {
				
				int lie = i + 1;
				if (lie > 7) {
					break;
				}
				String value = cellList.get(i);
				if(value==null){
					break;
				}
				value = value.replaceAll("\\s*", ""); //去空格
				if (hang == 1) {
					//如果对应的列名不对，就删除，说明上传错文件了，只判断了第一列
					if (lie == 1) {
							//企业红名单
							if(!Constant.EXCLE_ENTERPRISE_NAME.equals(value)){
								json.put("code","300");
								UtilMethods.delFile(filePath);
								return json;
							}
					}
				}
				if(hang==1){
					break;
				}
				if (lie == 1) {
					entity.setDepartmentName(value);//部门
				}else if (lie == 2) {
					entity.setPersonaName(value);//自然人或企业名称
				}else if (lie == 3) {
					int index = value.indexOf(".");
					if(index==-1){
						entity.setPersonaIdCard(value);//证件号（组织机构代码或统一代码）
					}else{
						value = value.substring(0, index);
						entity.setPersonaIdCard(value);//证件号（组织机构代码或统一代码）
					}
				}else if (lie == 4) {
					entity.setProjectName(value);//守信红名单项目
				}else if (lie == 5) {
					entity.setReason(value);//列入红名单原因
				}else if (lie == 6) {
					entity.setAddDate(value);//列入红黑名单日期
				}else if (lie == 7) {
					entity.setValidity(value);//有效期
				}
			}
			//处理的是自然人的信息，所有自然人的名称肯定是不能为空的
			if(entity.getPersonaName()!=null && !"".equals(entity.getPersonaName().trim())
					
					){
				entity.setSysId(Uid.getUid());
				entity.setType(type);//部门id
				resultList.add(entity);
			}else{
				if(hang !=1){
					json.put("code","400");
					UtilMethods.delFile(filePath);
					return json;
				}
			}
		}

		int count = -1;
		try {
			if(resultList.size()==0){
				count=0;
			}else{
				count = addBatchPersonal(resultList);
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			json.put("count", count);
			UtilMethods.delFile(filePath);
		}
		return json;
	}
	
	
	

}
